package com.tutucms.common.data;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 自定义KV集合较安全线程
 * @author ComXu
 *
 * @param <K>
 * @param <V>
 */
public class KVMap<K,V> implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = -6276890619465343944L;
	private List<KeyValue<K,V>> list;
	public KVMap(){
		list = Collections.synchronizedList(new ArrayList<KeyValue<K,V>>());
	}
	/**
	 * 插入值
	 * @param k key
	 * @param v value
	 */
	public synchronized void put(K k,V v){
		
		KeyValue<K,V> kv = new KeyValue<K,V>();
		kv.setK(k);
		kv.setV(v);
		list.add(kv);
	}
	/**
	 * 移除元素从对象中
	 * @param i
	 */
	public synchronized void removeByIndex(int i){
		if(i>=0){
			for (int j = 0; j < list.size(); j++) {
				list.remove(j);
			}
		}
	}
	/**
	 * 移除元素从对象中
	 * @param key
	 */
	public synchronized void removeByKey(K key){
		if(key!=null){
			for (int j = 0; j < list.size(); j++) {
				if(list.get(j).getK().equals(key)){
					list.remove(j);
				}
			}
		}
	}
	/**
	 * 根据key获取
	 * @param key
	 * @return
	 */
	public V get(K key){
		if(key!=null){
			for (int i = 0; i < list.size(); i++) {
				if(list.get(i).getK().equals(key)){
					return list.get(i).getV();
				}
			}
		}
		return null;
	}
	/**
	 * 根据下标获取
	 * @return
	 */
	public V getValueIndex(int index){
		return list.get(index).getV();
	}
	/**
	 * 根据下标获取
	 * @return
	 */
	public K getKeyIndex(int index){
		return list.get(index).getK();
	}
	/**
	 * 长度
	 * @return
	 */
	public int size(){
		return list.size();
	}
	private class KeyValue<K1,V1>{
		private K k;
		private V v;
		public K getK() {
			return k;
		}
		public void setK(K k) {
			this.k = k;
		}
		public V getV() {
			return v;
		}
		public void setV(V v) {
			this.v = v;
		}
	}
}
